﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;


public partial class administracion_registro_usuario : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Menu m = Session["Menu"] as Menu;
        if (m == null) Response.Redirect("../login.aspx");
        if (!m.Administracion)
        {
            Response.Redirect("../home/home.aspx");
        }

        Menu menuLateral = new Menu();
        lblMenuLateral.Text = menuLateral.MenuAdministracionDetalles();

        desactivarCampos();
        SetFocus(btnNuevo);
    }

    /******** BOTONES *******************/
    protected void btnNuevo_Click(object sender, EventArgs e)
    {
        activarCampos();
        limpiarCampos();
        btnGuardar.Visible = true;
        btnNuevo.Visible = false;
        btnCancelar.Enabled = true;
        btnBuscar.Enabled = false;
        SetFocus(txtUsuario);
        lblMensaje.Text = "";


    }

    protected void btnCancelar_Click(object sender, EventArgs e)
    {
        desactivarCampos();

        btnGuardar.Visible = false;
        btnNuevo.Visible = true;
        btnEliminar.Visible = false;
        btnModificar.Visible = false;
        btnBuscar.Enabled = true;
        btnCancelar.Enabled = false;

        limpiarCampos();

    }

    protected void btnGuardar_Click(object sender, EventArgs e)
    {
        Usuario u = new Usuario();

        cargarDesdeInterfaz(u);

        try
        {
            u.GuardarUsuario();
            lblMensaje.Text = "El usuario fue agregado correctamente";
            desactivarCampos();
            btnGuardar.Visible = false;
            btnCancelar.Enabled = false;
            btnNuevo.Visible = true;
            btnBuscar.Enabled = true;
            limpiarCampos();
        }
        catch (ConexionException ex)
        {
            lblMensaje.Text = ex.Message;
        }
        catch (UsuarioException ex) 
        {
            lblMensaje.Text = ex.Message;
            activarCampos();
            
        }

       


    }

    protected void btnEliminar_Click(object sender, EventArgs e)
    {
        mpeEliminarUsuario.Show();
    }

    protected void btnAceptarEliminar_Click(object sender, EventArgs e)
    {
        Usuario u = Session["UsuarioSeleccionado"] as Usuario;
        try
        {
            u.Borrar();
            lblMensaje.Text = "El usuario fue borrado correctamente";
            btnEliminar.Visible = false;
            btnModificar.Visible = false;
            btnNuevo.Visible = true;
            btnCancelarModificar.Visible = false;
            btnCancelar.Visible = true;
            btnCancelar.Enabled = false;
            limpiarCampos();

        }
        catch (ConexionException ex)
        {
            lblMensaje.Text = ex.Message;
        }
    }





    protected void btnBuscar_Click(object sender, EventArgs e)
    {
        lblMensaje.Text = "";
        SetFocus(txtUsuarioBuscar);
        llenarDatosGrid();
        mpeBuscar.Show();

    }
    protected void btnModificar_Click(object sender, EventArgs e)
    {
        activarCampos();
        btnEliminar.Visible = false;
        btnGuardarModif.Visible = true;

        btnBuscar.Enabled = false;
        btnModificar.Visible = false;
        btnCancelar.Visible = false;
        btnCancelarModificar.Visible = true;
        SetFocus(txtUsuario);
        lblMensaje.Text = "";
    }

    protected void btnGuardarModif_Click(Object sender, EventArgs e)
    {

        Usuario u = Session["UsuarioSeleccionado"] as Usuario;
        String contrasenaActual = u.Contrasena;
        cargarDesdeInterfaz(u);
        if (txtContrasena.Text == "")
        {
            u.Contrasena = contrasenaActual;
        }

        try
        {
            u.Actualizar();
            lblMensaje.Text = "El usuario fue modificado correctamente";
            btnModificar.Visible = true;
            btnGuardarModif.Visible = false;
            btnEliminar.Visible = true;
            btnCancelarModificar.Visible = false;
            btnCancelar.Visible = true;
            btnBuscar.Enabled = true;
        }
        catch (ConexionException ex)
        {
            lblMensaje.Text = ex.Message;
        }

    }

    protected void btnCancelarModificar_Click(Object sender, EventArgs e)
    {
        cargarSeleccionado(); //volvemos a cargar a la interfaz el usuario que habiamos selecionado sin cambios
        btnGuardarModif.Visible = false;
        btnCancelarModificar.Visible = false;
        btnCancelar.Visible = true;
        btnBuscar.Enabled = true;

    }


    /*********************Funciones*************************/
    private void cargarDesdeInterfaz(Usuario u)
    {
        u.Nombre = txtNombre.Text;
        u.Apellido = txtApellido.Text;
        u.TipoDoc = ddlTipoDoc.Text;
        try
        {
            u.NroDocumento = int.Parse(txtNroDocumento.Text);
        }
        catch
        {
            u.NroDocumento = 0;
        }
        u.FechaRegistro = DateTime.Now;
        u.Sexo = ddlSexo.Text;
        u.Telefono = txtTelefono.Text;
        u.Email = txtEmail.Text;
        u.Direccion = txtDireccion.Text;
        u.Ciudad = txtCiudad.Text;
        u.TipoPersona = ddlTipoPersona.Text;

        u.NombreUsuario = txtUsuario.Text;
        u.Contrasena = txtContrasena.Text;
        u.Estado = ddlEstado.Text;
    }







    private void desactivarCampos()
    {
        txtApellido.Enabled = false;
        txtCiudad.Enabled = false;
        txtContrasena.Enabled = false;
        txtDireccion.Enabled = false;
        txtEmail.Enabled = false;
        txtNombre.Enabled = false;
        txtNroDocumento.Enabled = false;
        txtTelefono.Enabled = false;
        txtUsuario.Enabled = false;
        ddlSexo.Enabled = false;
        ddlTipoDoc.Enabled = false;
        ddlEstado.Enabled = false;
        ddlTipoPersona.Enabled = false;
    }

    private void activarCampos()
    {
        txtApellido.Enabled = true;
        txtCiudad.Enabled = true;
        txtContrasena.Enabled = true;
        txtDireccion.Enabled = true;
        txtEmail.Enabled = true;
        txtNombre.Enabled = true;
        txtNroDocumento.Enabled = true;
        txtTelefono.Enabled = true;
        txtUsuario.Enabled = true;
        ddlSexo.Enabled = true;
        ddlTipoDoc.Enabled = true;
        ddlTipoPersona.Enabled = true;
        ddlEstado.Enabled = true;
        SetFocus(txtUsuario);
    }

    private void limpiarCampos()
    {
        txtApellido.Text = "";
        txtCiudad.Text = "";
        txtContrasena.Text = "";
        txtDireccion.Text = "";
        txtEmail.Text = "";
        txtNombre.Text = "";
        txtNroDocumento.Text = "";
        txtTelefono.Text = "";
        txtUsuario.Text = "";

    }







    /**************************Controles de busqueda*****************/

    protected void btnBuscarPopub_Click(object sender, EventArgs e)
    {

        llenarDatosGrid();
        mpeBuscar.Show();
        SetFocus(txtUsuarioBuscar);

    }

    private void llenarDatosGrid()
    {
        Usuario u = new Usuario();
        Session["Usuario"] = u; //guardo el usuario en la session para utilizar sus metodos despues

        DataSet ds = u.Buscar(txtUsuarioBuscar.Text, txtNombreBuscar.Text, txtNroDocBuscar.Text);
        gvUsuarios.DataSource = ds.Tables[0];
        gvUsuarios.DataBind();
        Session["Usuarios"] = ds.Tables[0]; //Almaceno el DataSet en unavariable de Session para usarla el Sorting del GridView

    }
    protected void gvUsuarios_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        gvUsuarios.PageIndex = e.NewPageIndex;
        gvUsuarios.DataSource = Session["Usuarios"];
        gvUsuarios.DataBind();
        mpeBuscar.Show();
    }

    protected void btnLimpiarCampos_Click(object sender, EventArgs e)
    {

        limpiarCamposBuscar();
        mpeBuscar.Show();
    }

    private void limpiarCamposBuscar()
    {
        txtUsuarioBuscar.Text = "";
        txtNombreBuscar.Text = "";
        txtNroDocBuscar.Text = "";
    }

    protected void gvUsuarios_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "select")
        {
            gvUsuarios.SelectedIndex = Convert.ToInt32(e.CommandArgument);
            int idUsuario = Convert.ToInt32(gvUsuarios.SelectedDataKey.Value);


            //Recupera la tabla Usuarios de la session
            DataTable dt = Session["Usuarios"] as DataTable;

            //Busca en la tabla el row con el id del usuario seleccionado
            DataRow[] rows = dt.Select("id_usuario = " + idUsuario + " ");

            //Creamos un usuario con los datos cargados del grid
            Usuario u = new Usuario();
            u.Id = idUsuario;
            u.NombreUsuario = rows[0]["usuario"].ToString();
            u.Contrasena = rows[0]["contrasena"].ToString();

            u.Nombre = rows[0]["nombre"].ToString();
            u.Apellido = rows[0]["apellido"].ToString();
            u.TipoDoc = rows[0]["tipo_doc"].ToString();
            u.NroDocumento = Convert.ToInt32(rows[0]["nro_documento"].ToString());
            u.Sexo = rows[0]["sexo"].ToString();
            u.TipoPersona = rows[0]["tipo_persona"].ToString();
            u.Direccion = rows[0]["direccion"].ToString();
            u.Ciudad = rows[0]["ciudad"].ToString();
            u.Telefono = rows[0]["telefono"].ToString();
            u.Email = rows[0]["email"].ToString();
            u.Estado = rows[0]["estado"].ToString();

            //Guardamos el usuario seleccionado en la session para poder modificarlo o eliminarlo despues
            Session["UsuarioSeleccionado"] = u;

            cargarSeleccionado(); //cargamos a la interfaz los datos del usuario seleccionado


        }

    }



    //Ordena el GridView de Busqueda de usuarios
    protected void gvUsuarios_Sorting(object sender, GridViewSortEventArgs e)
    {

        //Recupera la tabla de la session
        DataTable dt = Session["Usuarios"] as DataTable;

        if (dt != null)
        {

            //Orden alos datos
            dt.DefaultView.Sort = e.SortExpression + " " + GetSortDirection(e.SortExpression);
            gvUsuarios.DataSource = Session["Usuarios"];
            gvUsuarios.DataBind();
        }
        mpeBuscar.Show();
    }

    private string GetSortDirection(string column)
    {

        // Por defecto, seteamos la direccion como ascendente
        string sortDirection = "ASC";

        // Recuparea la ultima columna que fue ordenada
        string sortExpression = ViewState["SortExpression"] as string;

        if (sortExpression != null)
        {

            if (sortExpression == column)
            {
                string lastDirection = ViewState["SortDirection"] as string;
                if ((lastDirection != null) && (lastDirection == "ASC"))
                {
                    sortDirection = "DESC";
                }
            }
        }


        // Guarda los nuevos valores en el ViewState
        ViewState["SortDirection"] = sortDirection;
        ViewState["SortExpression"] = column;

        return sortDirection;
    }

    /**
     * Carga el usuario que se había selecionado en la busqueda a la interfaz
     */
    private void cargarSeleccionado()
    {
        Usuario u = Session["UsuarioSeleccionado"] as Usuario;
        txtUsuario.Text = u.NombreUsuario;
        txtNombre.Text = u.Nombre;
        txtApellido.Text = u.Apellido;
        ddlTipoDoc.Text = u.TipoDoc;
        txtNroDocumento.Text = u.NroDocumento.ToString();
        ddlSexo.Text = u.Sexo;
        ddlTipoPersona.Text = u.TipoPersona;
        txtDireccion.Text = u.Direccion;
        txtCiudad.Text = u.Ciudad;
        txtTelefono.Text = u.Telefono;
        txtEmail.Text = u.Email;
        ddlEstado.Text = u.Estado;

        btnModificar.Visible = true;
        btnEliminar.Visible = true;
        btnCancelarModificar.Visible = true;
        btnGuardarModif.Visible = false;
        btnCancelar.Visible = true;
        btnCancelarModificar.Visible = false;
        btnCancelar.Enabled = true;
        btnGuardar.Visible = false;
        btnNuevo.Visible = false;

    }

}
